class Solution {
public:
    int candy(vector<int>& ratings) {
        int n = ratings.size();
        // 左规则
        // if(ratings[i] > ratings[i - 1])
        //     candy[i] = candy[i - 1] + 1;
        // 右规则
        // if(ratings[j] > ratings[j + 1])
        //     candy[j] = candy[j + 1] + 1;

        // 所以需要两个数组，记录左规则和右规则
        // 最后再遍历这两个数组，取左规则和右规则中最大的数
        vector<int> left(n, 1);     // 至少一个，所以初始化为1
        vector<int> right(n, 1);
        for(int i = 1; i < n; i++)
            if(ratings[i] > ratings[i - 1])
                left[i] = left[i - 1] + 1;
        for(int j = n - 2; j >= 0; j--)
            if(ratings[j] > ratings[j + 1])
                right[j] = right[j + 1] + 1;
        int ret = 0;
        for(int i = 0; i < n; i++)
            ret += max(left[i], right[i]);
        return ret;
    }
};